package com.yupi.yurpc.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.setting.dialect.Props;

/**
 * @program: yu-rpc
 * @description: Java Lotus
 * @author: spring
 * @create: 2024-10-23
 * 作用是读取配置文件并返回配置对象，可以简化调用。
 */
/*
配置工具类
工具类应当尽量通用，和业务不强绑定，提高使用的灵活性。
比如支持外层传入要读取的配置内容前缀、支持传入环境等
 */
public class ConfigUtils {
    //调用 ConfigUtils 的静态方法就能读取配置了

    /**
     * 加载配置对象
     * @param tClass 对象类
     * @param prefix 前缀
     * @return 返回读取的配置
     * @param <T> 泛型
     */
    public static <T> T loadConfig(Class<T> tClass, String prefix) {
        return loadConfig(tClass, prefix, "");
    }


    /**
     * 加载配置对象，支持分区环境
     * @param tClass 对象类
     * @param prefix 前缀
     * @param environment 分区环境
     * @return 返回读取的配置
     * @param <T> 泛型
     */
    public static <T> T loadConfig(Class<T> tClass, String prefix, String environment) {
        StringBuilder configFileBuilder = new StringBuilder("application");
        if (StrUtil.isNotBlank(environment)) {
            configFileBuilder.append("-").append(environment);
        }
        configFileBuilder.append(".properties");
        Props props = new Props(configFileBuilder.toString());
        return props.toBean(tClass, prefix);

    }

}
